Revert "Ignore stale NetworkCallback if NETWORK_STATE_CHANGED already received" This reverts commit eb449fceda6ea6181ab2d9e711828d3c54b6f038. Reason for revert: Causes b/381168273 Change-Id: I423ebd7f9c63b58e2e163a8e643c732b8544d096
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java index fbf7b3a..d3525d8 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
@@ -246,7 +246,6 @@ protected final Handler mCallbackHandler; protected int mWifiInfoLevel = WIFI_LEVEL_UNREACHABLE; protected int mScanResultLevel = WIFI_LEVEL_UNREACHABLE; - protected WifiInfo mPrimaryWifiInfo; protected WifiInfo mWifiInfo; protected NetworkInfo mNetworkInfo; protected Network mNetwork; @@ -1004,7 +1003,6 @@ */ synchronized void onPrimaryWifiInfoChanged( @Nullable WifiInfo primaryWifiInfo, @Nullable NetworkInfo networkInfo) { - mPrimaryWifiInfo = primaryWifiInfo; if (primaryWifiInfo == null || !connectionInfoMatches(primaryWifiInfo)) { if (mNetworkInfo != null) { mNetworkInfo = null; @@ -1041,11 +1039,8 @@ } // Treat non-primary, non-OEM connections as disconnected. - // If mPrimaryWifiInfo exists (i.e. WifiManager.getConnectionInfo()) but this WifiInfo is - // also primary, treat it as lost since it may be a stale value. - boolean isPrimary = NonSdkApiWrapper.isPrimary(wifiInfo) - && (mPrimaryWifiInfo == null || wifiInfo.equals(mPrimaryWifiInfo)); - if (!isPrimary && !NonSdkApiWrapper.isOemCapabilities(capabilities)) { + if (!NonSdkApiWrapper.isPrimary(wifiInfo) + && !NonSdkApiWrapper.isOemCapabilities(capabilities)) { onNetworkLost(network); return; } diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java index 198fdd5..6cfde19 100644 --- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java +++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
@@ -60,7 +60,6 @@ import android.net.MacAddress; import android.net.Network; import android.net.NetworkCapabilities; -import android.net.NetworkInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; @@ -487,46 +486,6 @@ } } - /** - * Tests that onNetworkCapabilitiesChanged is ignored if it is primary but another network is - * already marked as primary via NETWORK_STATE_CHANGED/getConnectionInfo(). This may happen - * as a race condition if we get the broadcast before NetworkCallback changes. - */ - @Test - public void testOnNetworkCapabilitiesChanged_otherNetworkIsPrimary_doesNotBecomeConnected() { - final WifiConfiguration config = new WifiConfiguration(); - config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP); - config.SSID = "\"ssid\""; - config.networkId = 1; - final StandardWifiEntry entry = new StandardWifiEntry( - mMockInjector, mTestHandler, - ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP), - Collections.singletonList(config), null, mMockWifiManager, - false /* forSavedNetworksPage */); - when(mMockWifiInfo.getNetworkId()).thenReturn(1); - when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI); - - MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking(); - try { - // Mock a different primary WifiInfo for onPrimaryWifiInfoChanged - WifiInfo primaryWifiInfo = mock(WifiInfo.class); - when(primaryWifiInfo.getNetworkId()).thenReturn(2); - NetworkInfo mockNetworkInfo = mock(NetworkInfo.class); - entry.onPrimaryWifiInfoChanged(primaryWifiInfo, mockNetworkInfo); - - // Stale NetworkCallback arrives - ExtendedMockito.doReturn(true) - .when(() -> NonSdkApiWrapper.isPrimary(mMockWifiInfo)); - entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities); - - // Stale NetworkCallback should be ignored and the network should remain disconnected. - assertThat(entry.getConnectedState()).isEqualTo(CONNECTED_STATE_DISCONNECTED); - assertThat(entry.isPrimaryNetwork()).isFalse(); - } finally { - session.finishMocking(); - } - } - @Test public void testConnect_savedNetwork_usesSavedConfig() { final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);